/*
预设代码中建立了一个带有头结点的单向链表。
编写一个函数，将链表中数值域的数值为偶数的节点移到链表尾部。
如果偶数节点多于一个,则连接到链表尾部节点的先后顺序按原来的顺序。
结构的定义：
struct node
{
int num;
struct node *next;
}
typedef struct node NODE;
函数的原型：NODE *MoveNode( NODE *head )。
其中：参数 head 是单向链表的头指针。函数的返回值是单向链表的头指针。
运行时输入有一行，输入各个节点的数值域的值，输入-1时结束。
例如链表节点数值成员值为：15 6 7 21 2 13 24 -1 //-1 是节点输入结束标志
输出：15 7 21 13 6 2 24

![](图片1.png)
*/

/*
测试用例1:
输入：
15 6 7 21 2 13 24 -1↵
输出：
15 7 21 13 6 2 24 ↵

测试用例2:
输入：
1 2 -1↵
输出：
1 2 ↵

测试用例3:
输入：
2 1 -1↵
输出：
1 2 ↵

测试用例4:
输入：
1 2 3 4 5 6 7 8 -1↵
输出：
1 3 5 7 2 4 6 8 ↵

测试用例5:
输入：
8 7 6 5 4 3 2 1 -1↵
输出：
7 5 3 1 8 6 4 2 ↵

测试用例6:
输入：
4 34 54 1 765 -1↵
输出：
1 765 4 34 54 ↵

测试用例7:
输入：
1 3 5 7 -1↵
输出：
1 3 5 7 ↵

测试用例8:
输入：
2 4 6 8 -1↵
输出：
2 4 6 8 ↵
*/
#include <stdio.h>  
#include <stdlib.h>  
typedef struct numLink  
{  
	int no;  
	struct numLink *next;  
}NODE;  

NODE *MoveNode( NODE * );  

void SetLink( NODE *h )  
{  
	NODE *p=NULL, *q=NULL;  
	int m;  
	while(1)  
		{  
			scanf("%d",&m);  
			if( m == -1 )  
				return ;  
			p = (NODE *)malloc(sizeof(NODE));  
			p->no = m;  
			p->next = NULL;  
			if( h->next == NULL )  
				{  
					h->next = p;  
					q = p;  
				}  
			else  
				{  
					q->next = p;  
					q = q->next;  
				}  
		}  
	return;  
}  

int main( )  
{  
	NODE *head=NULL, *q=NULL;  
	head = (NODE *)malloc(sizeof(NODE));  
	head->no = -1;  
	head->next = NULL;  
	
	SetLink( head );  
	q = MoveNode( head );  
	do  
		{  
			printf("%d ",q->next->no);  
			q = q->next;  
		}while( q->next != NULL );   
	printf("\n");  
	return 0;  
}  
